﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace ScreenConnection
{
    /// <summary>
    /// Type permettant de définir le type de champ
    /// TEXT -> TextBox
    /// PASSWORD -> PasswordBox
    /// LIST -> Combo-Box
    /// </summary>
    public enum TYPE
    {
        TEXT,
        PASSWORD,
        LIST
    }
    
    /// <summary>
    /// Classe représentant un champ de saisi sur l'écran de connexion
    /// </summary>
    public class Champ
    {
        #region Attribut(s)


        #endregion

        #region Propriété(s)

        /// <summary>
        /// Nom du champ
        /// </summary>
        public String Nom
        {
            get;
            private set;
        }

        /// <summary>
        /// Type du champ
        /// </summary>
        public TYPE Type
        {
            get;
            private set;
        }

        /// <summary>
        /// Liste de valeur. Est utilisé que lors d'une combo-box
        /// </summary>
        public List<String> Values
        {
            get;
            private set;
        }

        /// <summary>
        /// Element graphique du champ
        /// </summary>
        public UIElement _Champ
        {
            get;
            set;
        }

        #endregion

        #region Constructeur(s)

        /// <summary>
        /// Constructeur sans paramètre
        /// </summary>
        public Champ()
        {
            Nom = "";
            Type = TYPE.TEXT;
            Values = new List<string>();
        }

        /// <summary>
        /// Constructeur avec juste le nom et le type. A utilisé pour TEXT et PASSWORD comme type.
        /// Si LIST est renseigné comme TYPE, values  est instancié mais sera vide
        /// </summary>
        /// <param name="nom">Nom du champ</param>
        /// <param name="type">Type du champ</param>
        public Champ(String nom, TYPE type)
        {
            Nom = nom;
            Type = type;
            Values = new List<string>();
        }

        /// <summary>
        /// Constructeur avec juste le nom et le type. A utilisé pour LIST.
        /// Si TEXT et PASSWORD est renseigné comme TYPE, values ne sera pas utilisé pour ce champ;
        /// </summary>
        /// <param name="nom">Nom du champ</param>
        /// <param name="type">Type du champ</param>
        /// <param name="values"></param>
        public Champ(String nom, TYPE type, List<string> values)
        {
            Nom = nom;
            Type = type;
            Values = values;
        }

        #endregion

        #region Méthode(s)

        /// <summary>
        /// Initialize le champ
        /// </summary>
        public void Initialize()
        {
            switch (Type)
            {
                case TYPE.PASSWORD:
                    ((PasswordBox)_Champ).Password = String.Empty;
                    break;

                case TYPE.TEXT:
                    ((TextBox)_Champ).Text = String.Empty;
                    break;

                default:
                    break;
            }
        }

        #endregion
    }
}
